window.Socket = '';
window.setIntervalWesocketPush = null;
/**
 * 建立websocket连接
 */
function createSocket() {
  if (szoa.client.websocketUrl) {
    Socket && Socket.close();
    if (!Socket) {
      // console.log('建立websocket连接');
      Socket = new WebSocket(szoa.client.websocketUrl);
      Socket.onopen = onopenWS;
      Socket.onmessage = onmessageWS;
      Socket.onerror = onerrorWS;
      Socket.onclose = oncloseWS;
    } else {
      // console.log('websocket已连接');
    }
  } else {
    // console.log('载入顺序错误');
  }
}

/**打开WS之后发送心跳 */
function onopenWS() {
  sendPing();
}

/**连接失败重连 */
function onerrorWS() {
  Socket.close();
  clearInterval(setIntervalWesocketPush);
  // console.log('连接失败重连中');
  if (Socket.readyState !== 3) {
    Socket = null;
    createSocket();
  }
}

/**WS数据接收统一处理 */
function onmessageWS(e) {
  window.dispatchEvent(new CustomEvent('onmessageWS', {
    detail: {
      data: e.data
    }
  }))
}

/**
 * 发送数据但连接未建立时进行处理等待重发
 * @param {any} message 需要发送的数据
 */
function connecting(message) {
  setTimeout(function () {
    if (Socket.readyState === 0) {
      connecting(message);
    } else {
      Socket.send(JSON.stringify(message));
    }
  }, 1000);
}

/**
 * 发送数据
 * @param {any} message 需要发送的数据
 */
function sendWSPush(message) {
  if (Socket !== null && Socket.readyState === 3) {
    Socket.close();
    createSocket();
  } else if (Socket.readyState === 1) {
    $data = JSON.stringify(message);
    Socket.send($data);
    // console.log('发送：', $data);
  } else if (Socket.readyState === 0) {
    connecting(message);
  }
}

/**断开重连 */
function oncloseWS() {
  clearInterval(setIntervalWesocketPush);
  // console.log('websocket已断开....正在尝试重连');
  if (Socket.readyState !== 2) {
    Socket = null;
    createSocket();
  }
}
/**发送心跳
 */
function sendPing() {
  clearInterval(setIntervalWesocketPush);
  sendWSPush({ type: 'ping' });
  // Socket.send();
  setIntervalWesocketPush = setInterval(function () {
    sendWSPush({ type: 'ping' });//心跳名称 默认字符串ping
    // Socket.send({type: 'ping'});
  }, 10000);//心跳间隔毫秒 默认10000
}

/**
 * 
仅三个api 且一般只需要用到`createSocket`, `sendWSPush`
//建立websocket连接
createSocket()

// 发送消息
sendWSPush(data)

// 接收消息
function getsocketData(e) {  // 创建接收消息函数
  var data = e && e.detail.data
  console.log(data);
}
// 注册监听事件
window.addEventListener('onmessageWS', getsocketData)
// 在需要的时候卸载监听事件，比如离开页面
window.removeEventListener('onmessageWS', getsocketData)


 //发送心跳
  sendPing()
 */

